PostgreSQL 进程和内存架构
1 连接池:
pgbounce
pgpool II
2 statistics collector
收集的统计信息,存放在statistics collector
pg_stat_database
postgres=# select * from pg_stat_database where datname='postgres';
-[ RECORD 1 ]-----+------------------------------
datid | 13510 #数据库oid
datname | postgres #数据库名
numbackends | 98 #访问当前数据库连接数量
xact_commit | 14291309 #该数据库事务提交总量
xact_rollback | 0 #该数据库事务回滚总量
blks_read | 536888 #总磁盘物理读的块数,这里read也可能是从page cache读取,如果这里很高需要结合blk_read_time看是否真的存在很多实际从磁盘读取的情况。
blks_hit | 261717850 #在shared_buffer命中的块数
tup_returned | 58521416 #对于表来说是全表扫描的行数,对于索引是通过索引方法返回的索引行数,如果这个值数量明显大于tup_fetched,说明当前数据库存在大量全表扫描的情况。
tup_fetched | 57193639 #指通过索引返回的行数
tup_inserted | 14293061 #插入的行数
tup_updated | 42868451 #更新的行数
tup_deleted | 98 #删除的行数
conflicts | 0 #与恢复冲突取消的查询次数(只会在备库上发生)
temp_files | 0 #产生临时文件的数量,如果这个值很高说明work_mem需要调大
temp_bytes | 0 #临时文件的大小
deadlocks | 0 #死锁的数量,如果这个值很大说明业务逻辑有问题
blk_read_time | 0 #数据库中花费在读取文件的时间,这个值较高说明内存较小,需要频繁的从磁盘中读入数据文件
blk_write_time | 0 #数据库中花费在写数据文件的时间,pg中脏页一般都写入page cache,如果这个值较高,说明page cache较小,操作系统的page cache需要更积极的写入。
stats_reset | 2019-04-09 14:06:53.416473+08 #统计信息重置的时间
2.1 查看进程父子关系
pstree -p 39674